/*
 * PrincipalMetrica.java
 *
 * Created on 14 de febrero de 2006, 06:28 PM
 */
package ig.metrica.ui;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import ig.metrica.ui.matrizcorrelacion.UpdateMatricesCir051;
import ejb.metrica.seguridad.control.LoginDTO;
import ejb.metrica.seguridad.dao.OpcionDTO;
import ejb.metrica.seguridad.entity.RolesDTO;
import ig.formato.util.ModeloLista;
import ig.metrica.ui.agrupacion.PAgrupacion;
import ig.metrica.ui.conexion.PantallaConexion;
import ig.metrica.ui.editor.da.IFEditorMetricaDA;
import ig.metrica.ui.escenario.AdminEscenarios;
import ig.metrica.ui.escenario.Escenarios;
import ig.metrica.ui.formatos.PantallaFormatos;
import ig.metrica.ui.interfaces.comunes.IMetodosPantallas;
import ig.metrica.ui.matrizcorrelacion.PantallaEscaleraDeBandas;
import ig.metrica.ui.matrizcorrelacion.PantallaMatrizCorrelacion;
import ig.metrica.ui.modelo.WizzardModelo;
import ig.metrica.ui.origenesdedatos.PAdministradorConsultas;
import ig.metrica.ui.origenesdedatos.PAdministradorEntidades;
import ig.metrica.ui.origenesdedatos.consultas.PConsultas;
import ig.metrica.ui.pantallas.comunes.ManipulacionDatos;
import ig.metrica.ui.seguridad.PRoles;
import ig.metrica.ui.seguridad.PUsuarios;
import ig.metrica.ui.seguridad.PermisoDTO;
import ig.metrica.ui.unidadsubcuenta.PantallaUnidadSubcuenta;
import ig.util.DAbout;
import ig.util.ITeclas;
import ig.util.LoadProperties;
import ig.util.MiRendererTree;
import java.beans.PropertyVetoException;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.GregorianCalendar;
import java.util.Hashtable;
import java.util.List;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;

/**
 *
 * @author  jsanchez
 */
public class PrincipalMetrica extends javax.swing.JFrame {

    private DSalir dSalir = null;
    private MLogin mLogin = null;
    private String path = "ig/lib/images/";
    private Properties propiedades = LoadProperties.loadPropertiess("server/user.properties");
    private static Hashtable<String, Object> session = new Hashtable<String, Object>();
    //private String icoW = "folder-icon.png";
    private String icoP = "pantalla.gif";
    private OpcionDTO root = null;
    private Process pro2 = null;
    private Process pro1 = null;
    private Object[] OPCIONES = null;
    private String service = propiedades.getProperty("service", "true");
    private List<OpcionDTO> favoritos = new ArrayList<OpcionDTO>();
    


    public PrincipalMetrica(String iconTree) {
        //cargarOpcionesTree();
        //new IniSerJb(propiedades);
        cargarOpciones();
        OPCIONES = unificarOpciones();
        initComponents();
        cargarFavoritos();
        this.Button_About.setBorder(javax.swing.BorderFactory.createEmptyBorder(6, 6, 6, 6));
        this.Button_Salir.setBorder(javax.swing.BorderFactory.createEmptyBorder(6, 6, 6, 6));
        setSize(1024, 730);
        setTitle("IG-Metrica "+METRICA.VERSION);
        setIconImage(new javax.swing.ImageIcon(getClass().getResource("/ig/util/images/metrica.gif")).getImage());
        this.setLocationByPlatform(true);
        Tre_Opciones.setCellRenderer(new MiRendererTree(iconTree));
        Tre_Opciones.requestFocusInWindow();
        this.Tre_Opciones.setEnabled(false);
        this.setExtendedState(JFrame.MAXIMIZED_BOTH);
        setVisible(true);
        EventoBotonSalir();
    }

    public void cargarOpciones() {
        
        root = new OpcionDTO(1, null, "<IG METRICA>", null);
        OpcionDTO configuracion = root.addOpciones(new OpcionDTO(2, 1, "Configuraci\u00F3n", null));
        OpcionDTO gobierno = configuracion.addOpciones(new OpcionDTO(3, 2, "Gobierno", null));
        OpcionDTO formatoDeNormativa = gobierno.addOpciones(new OpcionDTO(4, 3, "Formatos de Normativa", PantallaFormatos.class.getName()));
        OpcionDTO unidadesDeCaptura = gobierno.addOpciones(new OpcionDTO(5, 3, "Unidades de Captura/Subcuenta", PantallaUnidadSubcuenta.class.getName()));
        OpcionDTO matrizDeCorrelacion = gobierno.addOpciones(new OpcionDTO(6, 3, "Matriz de Correlaci\u00F3n", PantallaMatrizCorrelacion.class.getName()));
        OpcionDTO matrizDeChoquesEscaleraDeBandas = gobierno.addOpciones(new OpcionDTO(7, 3, "Matriz de Choques/Escalera de Bandas", PantallaEscaleraDeBandas.class.getName()));
        OpcionDTO actualizarMatriz051 = gobierno.addOpciones(new OpcionDTO(8, 3, "Actulizar Matrices Circular 051", UpdateMatricesCir051.class.getName()));

        OpcionDTO cuentasDeUsuarios = configuracion.addOpciones(new OpcionDTO(9, 2, "Cuentas de Usuarios", null));
        OpcionDTO usuarios = cuentasDeUsuarios.addOpciones(new OpcionDTO(23, 9, "Usuarios", PUsuarios.class.getName()));
        OpcionDTO roles = cuentasDeUsuarios.addOpciones(new OpcionDTO(24, 9, "Roles", PRoles.class.getName()));

        OpcionDTO fuentesDeDatos = root.addOpciones(new OpcionDTO(10, 1, "Fuentes de Datos", null));
        OpcionDTO conexiones = fuentesDeDatos.addOpciones(new OpcionDTO(11, 10, "Conexiones", PantallaConexion.class.getName()));
        OpcionDTO administradorDeConsultas = fuentesDeDatos.addOpciones(new OpcionDTO(12, 10, "Administrador de Consultas", PAdministradorConsultas.class.getName()));
        OpcionDTO datosManualesMetricaDA = fuentesDeDatos.addOpciones(new OpcionDTO(13, 10, "Datos manuales MetricaDA", IFEditorMetricaDA.class.getName()));
        OpcionDTO agrupacionDeDatos = fuentesDeDatos.addOpciones(new OpcionDTO(14, 10, "Agrupaci\u00F3n de datos", PAgrupacion.class.getName()));

        OpcionDTO modelos = root.addOpciones(new OpcionDTO(15, 1, "Modelos", null));
        OpcionDTO modelo = modelos.addOpciones(new OpcionDTO(16, 15, "Modelos", WizzardModelo.class.getName()));
        OpcionDTO consultaVsModelos = modelos.addOpciones(new OpcionDTO(17, 15, "Consultas Vs. Modelos", PAdministradorEntidades.class.getName()));
        OpcionDTO escenarios = modelos.addOpciones(new OpcionDTO(18, 15, "Escenarios", Escenarios.class.getName()));
        OpcionDTO administradorDeEscenarios = modelos.addOpciones(new OpcionDTO(19, 15, "Administrador de Escenarios", AdminEscenarios.class.getName()));

        OpcionDTO salidas = root.addOpciones(new OpcionDTO(20, 1, "Salidas", null));
        OpcionDTO informes = salidas.addOpciones(new OpcionDTO(21, 20, "Consultas y Validaciones", PConsultas.class.getName()));
        OpcionDTO generadorDeInformes = salidas.addOpciones(new OpcionDTO(22, 20, "Generador de Informes", ig.formato.gui.app.plugin.PreportesExtends.class.getName()));
        //generadorDeInformes.

    }
    
    private void cargarFavoritos(){
        XStream x = new XStream(new DomDriver());
        File fFavoritos = null;
        BufferedReader bufferde = null;
        InputStreamReader reader = null;
        FileInputStream stream = null;

        try {
            fFavoritos = new File("server/favoritos");
            if (!fFavoritos.exists()) {
                fFavoritos.mkdirs();
            }
            stream = new FileInputStream(new File("server/favoritos/favoritos.xml"));
            favoritos = (List<OpcionDTO>) x.fromXML(bufferde = new BufferedReader(reader = new InputStreamReader(stream)));
            lFavoritos.setModel(new ModeloLista(favoritos.toArray()));
        } catch (Exception ex) {
            ex.printStackTrace();
            favoritos=new ArrayList<OpcionDTO>();
        } finally {
            try {
                bufferde.close();
            } catch (Exception ex) {
            }
            try {
                reader.close();
            } catch (Exception ex) {
            }
            try {
                stream.close();
            } catch (Exception ex) {
            }
        }
    }

    private DefaultMutableTreeNode loadTree(OpcionDTO dTO) {
        DefaultMutableTreeNode dmtn = new DefaultMutableTreeNode(dTO);
        for (OpcionDTO opcionDTO : dTO.getOpciones()) {
            if (opcionDTO.getOpciones().size() > 0) {
                dmtn.add(loadTree(opcionDTO));
            } else {
                dmtn.add(new DefaultMutableTreeNode(opcionDTO));
            }
        }
        return dmtn;
    }

    private Object[] unificarOpciones() {
        Collection<String> CC = new ArrayList<String>();
        DefaultMutableTreeNode dmtn = loadTree(root);
        for (int i = 0; i < dmtn.getChildCount(); i++) {
            if (dmtn.getChildAt(i).getChildCount() > 0) {
                for (int j = 0; j < dmtn.getChildAt(i).getChildCount(); j++) {
                    if (dmtn.getChildAt(i).getChildAt(j).getChildCount() == 0) {
                        CC.add(dmtn.getChildAt(i).getChildAt(j).toString() + " (" + dmtn.getChildAt(i).toString() + ")");
                    } else {
                        for (int k = 0; k < dmtn.getChildAt(i).getChildAt(j).getChildCount(); k++) {
                            CC.add(dmtn.getChildAt(i).getChildAt(j).getChildAt(k).toString() + " (" + dmtn.getChildAt(i).getChildAt(j).toString() + ")");
                        }
                    }
                }
            }
        }
        return CC.toArray();
    }

    public void centrar() {
        java.awt.Dimension dimensionScreen = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        java.awt.Rectangle dimensionPantalla = getBounds();
        setLocation((dimensionScreen.width - dimensionPantalla.width) / 2, (dimensionScreen.height - dimensionPantalla.height) / 2);
    }

    public Hashtable<String, Object> getSession() {
        return session;
    }

    /** Creates new form PrincipalMetrica */
    public String getUser() {
        return propiedades.getProperty("UserDefaultd");
    }

    void clossing() {
        for (int i = 0; i < contenedor.getComponents().length; i++) {
            if (contenedor.getComponents()[i] instanceof ManipulacionDatos) {
                try {
                    ((IMetodosPantallas) ((ManipulacionDatos) contenedor.getComponents()[i]).getPanelMetodosPantalla()).salir();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        this.desconectar();
    }

    private void killerProcess() {


        if (pro2 != null) {
            
            pro2.destroy();
            pro2 = null;
        }
        if (pro1 != null) {
            pro1.destroy();
            pro1 = null;
        }
    }

    private void ShuSerJb(){
        Runtime aplicacion = Runtime.getRuntime();

         if((!propiedades.getProperty("service_path","").equals("")) &&
           (!propiedades.getProperty("service_path","").equals(" ")) &&
           (propiedades.getProperty("service","true").equals("false"))){

                String comad1 = propiedades.getProperty("service_path","") + "\\server\\server\\bin\\shutdown.bat --shutdown";

                try{
                    Process p = aplicacion.exec(comad1);

                    String pingResult = "";
                    BufferedReader in = new BufferedReader(new
                    InputStreamReader(p.getInputStream()));
                    String inputLine;

                    while ((inputLine = in.readLine()) != null) {
                        System.out.println(inputLine);
                        pingResult += inputLine;
                    }

                    in.close();

                }

                catch(Exception e){System.out.println(e);}

         }
        
    }

    private void EventoBotonSalir() {
        Button_Salir.setEnabled(false);
        if (this.Tre_Opciones.isEnabled()) {
            dSalir = new DSalir(this);
            if (this.session.size() == 0) {
                dSalir.setEnabled(true, true, false);
            } else {
                dSalir.setEnabled(true, false, true);
            }
            dSalir.setVisible(true);
            Button_Salir.setEnabled(true);
        } else {
            this.conectar();
            Button_Salir.setEnabled(true);
        }
    }

    public void setJInternalPanel(JInternalFrame in) {
        contenedor.add(in);
        in.setVisible(true);
        try {
            in.setSelected(true);
        } catch (PropertyVetoException ex) {
            ex.printStackTrace();
        }
    }


    private void validarEvento(int tipo, OpcionDTO _dTO) {
        setCursor(new java.awt.Cursor(java.awt.Cursor.WAIT_CURSOR));
        OpcionDTO dTO = null;
        if (_dTO == null) {
            dTO = (OpcionDTO) ((javax.swing.tree.DefaultMutableTreeNode) Tre_Opciones.getLastSelectedPathComponent()).getUserObject();
        } else {
            dTO = _dTO;
        }

        if(dTO.getOpciones().size()>0 ){
            setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
            return;
        }

        if (validarPermisos(dTO.getLabel(), ENTRAR)) {
            try {
                if (tipo == 1 && dTO.getClasss() != null && !selectInternal(dTO.getLabel())) {
                    //System.out.println("dTO.getClasss() : " + dTO.getClasss());
                    Class classs = Class.forName(dTO.getClasss());
                    Constructor constructor = classs.getConstructor(JFrame.class);
                    Object obj = constructor.newInstance(this);
                    JInternalFrame in = null;
                    if (obj instanceof IMetodosPantallas) {
                        in = ((IMetodosPantallas) obj).getInternalFrame();
                    } else if (obj instanceof JInternalFrame) {
                        in = (JInternalFrame) obj;
                    } else if (obj instanceof JPanel) {
                        in = new JInternalFrame(dTO.getLabel(), true, false, true, true);
                        in.getContentPane().add((JPanel) obj);
                        if (obj instanceof WizzardSevinproPanel) {
                            in.setClosable(true);
                            in.setResizable(((WizzardSevinproPanel) obj).isResizable());
                            in.setMaximizable(((WizzardSevinproPanel) obj).isResizable());
                        } else {
                            in.setClosable(true);
                        }
                        in.setSize((int) ((JPanel) obj).getPreferredSize().getWidth(), (int) ((JPanel) obj).getPreferredSize().getHeight());
                    }
                    in.setTitle(dTO.getLabel());
                    in.setFrameIcon(new javax.swing.ImageIcon(getClass().getResource("/ig/util/images/metrica.gif")));
                    addComponente(in);
                } else if (tipo == 0 && dTO.getClasss() != null) {
                    for (OpcionDTO opcionDTO : favoritos) {
                        if(opcionDTO.getLabel().equals(dTO.getLabel())){
                            setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
                            return;
                        }
                    }
                    favoritos.add(dTO);
                    lFavoritos.setModel(new ModeloLista(favoritos.toArray()));
                    XStream x = new XStream();
                    FileWriter fileWriter = new FileWriter("server/favoritos/favoritos.xml");
                    x.toXML(favoritos, fileWriter);
                    fileWriter.close();
                }
            } catch (Exception ex) {
                System.out.println("ex.getMessage() : "+ ex.getCause().toString());
                if (ex.getMessage()!=null && ex.getMessage().trim().length() > 0) {
                    JOptionPane.showMessageDialog(contenedor, ex.getMessage(), "Mensaje", JOptionPane.OK_OPTION);
                }else if (ex.getCause().getMessage()!=null && ex.getCause().getMessage().trim().length() > 0) {
                    JOptionPane.showMessageDialog(contenedor, ex.getCause().getMessage(), "Mensaje", JOptionPane.OK_OPTION);
                }
                ex.printStackTrace();
            }
        } else {
            JOptionPane.showMessageDialog(contenedor, "Esta opci\u00F3n no esta habilitada para este usuario", "Mensaje", JOptionPane.OK_OPTION);
        }
        Lab_Proceso.setText("Finalizado");
        setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
    }

    public void addComponente(JInternalFrame in) throws PropertyVetoException {
        setCursor(new java.awt.Cursor(java.awt.Cursor.WAIT_CURSOR));
        java.awt.Rectangle dimensionScreen = contenedor.getBounds();
        java.awt.Rectangle dimensionPantalla = in.getBounds();
        in.setLocation((dimensionScreen.width - dimensionPantalla.width) / 2, (dimensionScreen.height - dimensionPantalla.height) / 2);
        contenedor.add(in);
        in.setVisible(true);
        in.setSelected(true);
    }

    private boolean selectInternal(String title) throws PropertyVetoException {
        for (int i = 0; i < contenedor.getAllFrames().length; i++) {
            if (contenedor.getAllFrames()[i].getTitle().equals(title)) {
                contenedor.getAllFrames()[i].setSelected(true);
                return true;
            }
        }
        return false;
    }

    public static void main(String args[]) {
        //args[0] = "4";
        String iconTree = "tree";
        if (args.length > 0) {
            try {
                iconTree = "metrica";
                if (args[0].equals("0")) {
                    iconTree = "tree";
                    JFrame.setDefaultLookAndFeelDecorated(true);
                    JDialog.setDefaultLookAndFeelDecorated(true);
                } else if (args[0].equals("1")) {
                    UIManager.setLookAndFeel("com.jgoodies.plaf.plastic.PlasticXPLookAndFeel");
                } else if (args[0].equals("2")) {
                    UIManager.setLookAndFeel("com.jgoodies.plaf.plastic.Plastic3DLookAndFeel");
                } else if (args[0].equals("3")) {
                    UIManager.setLookAndFeel("com.jgoodies.plaf.plastic.PlasticLookAndFeel");
                } else if (args[0].equals("4")) {
                    UIManager.setLookAndFeel("com.jgoodies.plaf.windows.ExtWindowsLookAndFeel");
                } else if (args[0].equals("5")) {
                    UIManager.setLookAndFeel("javax.swing.plaf.multi.MultiLookAndFeel");
                } else if (args[0].equals("6")) {
                    UIManager.setLookAndFeel("javax.swing.plaf.synth.SynthLookAndFeel");
                } else if (args[0].equals("7")) {
                    UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
                } else if (args[0].equals("8")) {
                    UIManager.setLookAndFeel("net.sourceforge.napkinlaf.NapkinLookAndFeel");
                }
            } catch (UnsupportedLookAndFeelException ex) {
                System.out.println("*Unsupported Look And Feel:" + ex.getMessage());
            } catch (Exception ex) {
                System.out.println("*Unsupported Look And Feel:" + ex.getMessage());
            }
        }else{
            try {
                iconTree = "metrica";
                UIManager.setLookAndFeel("com.jgoodies.plaf.windows.ExtWindowsLookAndFeel");
            } catch (UnsupportedLookAndFeelException ex) {
                System.out.println("*Unsupported Look And Feel:" + ex.getMessage());
            } catch (Exception ex) {
                System.out.println("*Unsupported Look And Feel:" + ex.getMessage());
            }
        }


        
        new PrincipalMetrica(iconTree);
    }

    /*public void iniSer() throws IOException{

        if(propiedades.getProperty("service", "true").equals("false")){
            iniSerJb.path = propiedades.getProperty("service_path");
            //iniSerJb.run();
            Runtime aplicacion = Runtime.getRuntime();

            String path = "cmd.exe -h C:\\chiquis.bat";

            Process p = aplicacion.exec(path);

            String pingResult = "";
            BufferedReader in = new BufferedReader(new
            InputStreamReader(p.getInputStream()));
            String inputLine;

           
            while ((inputLine = in.readLine()) != null) {
                System.out.println(inputLine);
                pingResult += inputLine;
                System.out.println(pingResult);
            }
            Calendar c1 = Calendar.getInstance();
            long actual = c1.getTimeInMillis();

            long finald = actual + (1000 * 25);

            while(actual == finald){
                c1 = Calendar.getInstance();
                actual = c1.getTimeInMillis();
                System.out.println("Iniciando el cliente en " + (finald - actual));
            }
        }

    }*/

    public static final int ENTRAR = 1;
    public static final int GUARDAR = 2;
    public static final int ELIMINAR = 3;

    public static boolean validarPermisos(String opcion,int opc){
        RolesDTO _rol = (RolesDTO) session.get("rol_dto");
        if(_rol.getOpciones()!=null){
            String[] campos=_rol.getOpciones().split(";");
            Object[] permiso=new Object[campos.length];
            for (int i = 0; i < campos.length; i++) {
                permiso[i]=new PermisoDTO(campos[i]);
            }
            for (int i = 0; i < permiso.length; i++) {
                if(((PermisoDTO)permiso[i]).getPermiso().trim().startsWith(opcion.trim())){
                    switch (opc) {
                        case ENTRAR:
                            return ((PermisoDTO)permiso[i]).isEntrar();
                        case GUARDAR:
                            return ((PermisoDTO)permiso[i]).isGuardar();
                        case ELIMINAR:
                            return ((PermisoDTO)permiso[i]).isEliminar();
                    }
                }
            }
        }
        return false;
    }

    public void setLogin(LoginDTO login) {
        String Key = getUser();
        Long ID = (Long) getSession().get(Key);
        Long ROL = (Long) getSession().get("ROL");
        login.setID(ID);
        login.setUSUARIO(Key);
        login.setROL(ROL);
    }

    void desconectar() {
        mLogin = new MLogin(this, null);
        mLogin.desconectar(this.session);
        this.session = new Hashtable<String, Object>();
        this.Button_Salir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ig/util/images/c1.png")));
//      this.Button_Salir.setIcon(CargadorImagenes.crearIconoPath(path+"c1.png"));
        this.Tre_Opciones.setEnabled(false);
        JInternalFrame[] ventanas = this.contenedor.getAllFrames();
        for (int i = 0; i < ventanas.length; i++) {
            ventanas[i].dispose();
        }
    }

    void conectar() {
        LOGIN = null;
        mLogin = new MLogin(this, propiedades);
    }

    void salir() {
        if (JOptionPane.showConfirmDialog(this, "Cerrando IG-Metrica.", "Cerrar", JOptionPane.OK_CANCEL_OPTION) == 0) {
            killerProcess();
            clossing();
            System.exit(0);
        }
    }
    public static String LOGIN = "";

    void conectado(String login) {
        this.Button_Salir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ig/util/images/c3.png")));
        this.Tre_Opciones.setEnabled(true);
        LOGIN = login;
    }

    public Object[] getOPCIONES() {
        return OPCIONES;
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        pTree = new javax.swing.JPopupMenu();
        mAddFavoritos = new javax.swing.JMenuItem();
        pListFavoridos = new javax.swing.JPopupMenu();
        mDelFavoritos = new javax.swing.JMenuItem();
        jToolBar1 = new javax.swing.JToolBar();
        Button_Salir = new javax.swing.JButton();
        jPanel1 = new javax.swing.JPanel();
        Button_About = new javax.swing.JButton();
        jSplitPane1 = new javax.swing.JSplitPane();
        contenedor = new javax.swing.JDesktopPane();
        lIg = new javax.swing.JLabel();
        jPanel2 = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        DefaultTreeModel model=new DefaultTreeModel(loadTree(root));
        Tre_Opciones = new javax.swing.JTree(model);
        jScrollPane2 = new javax.swing.JScrollPane();
        lFavoritos = new javax.swing.JList();
        Lab_Proceso = new javax.swing.JLabel();

        mAddFavoritos.setText("Adicionar selección a favoritos");
        mAddFavoritos.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mAddFavoritosActionPerformed(evt);
            }
        });
        pTree.add(mAddFavoritos);

        mDelFavoritos.setText("Quitar de favoritos");
        mDelFavoritos.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mDelFavoritosActionPerformed(evt);
            }
        });
        pListFavoridos.add(mDelFavoritos);

        setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
        setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                formWindowClosing(evt);
            }
        });

        jToolBar1.setRollover(true);
        jToolBar1.setEnabled(false);

        Button_Salir.setFont(new java.awt.Font("Dialog", 0, 10)); // NOI18N
        Button_Salir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ig/util/images/c1.png"))); // NOI18N
        Button_Salir.setToolTipText("Conectar/Desconectar");
        Button_Salir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                Button_SalirActionPerformed(evt);
            }
        });
        Button_Salir.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                Button_SalirKeyPressed(evt);
            }
        });
        jToolBar1.add(Button_Salir);

        jPanel1.setOpaque(false);

        org.jdesktop.layout.GroupLayout jPanel1Layout = new org.jdesktop.layout.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 362, Short.MAX_VALUE)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 44, Short.MAX_VALUE)
        );

        jToolBar1.add(jPanel1);

        Button_About.setFont(new java.awt.Font("Dialog", 0, 10)); // NOI18N
        Button_About.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ig/util/images/acercad.gif"))); // NOI18N
        Button_About.setToolTipText("Acerca de");
        Button_About.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                Button_AboutActionPerformed(evt);
            }
        });
        jToolBar1.add(Button_About);

        jSplitPane1.setDividerLocation(200);
        jSplitPane1.setAutoscrolls(true);
        jSplitPane1.setDoubleBuffered(true);
        jSplitPane1.setOneTouchExpandable(true);

        contenedor.setBackground(new java.awt.Color(255, 255, 255));
        contenedor.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        contenedor.setToolTipText("Panel de Trabajo");
        contenedor.setAutoscrolls(true);
        contenedor.addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentResized(java.awt.event.ComponentEvent evt) {
                contenedorComponentResized(evt);
            }
        });

        lIg.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ig/util/images/ig.PNG"))); // NOI18N
        lIg.setBounds(20, 20, 210, 120);
        contenedor.add(lIg, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jSplitPane1.setRightComponent(contenedor);

        jPanel2.setLayout(new java.awt.BorderLayout());

        jScrollPane1.setToolTipText("opciones");

        Tre_Opciones.setFont(new java.awt.Font("Dialog", 0, 10)); // NOI18N
        Tre_Opciones.setToolTipText("opciones");
        Tre_Opciones.setAutoscrolls(true);
        Tre_Opciones.setComponentPopupMenu(pTree);
        Tre_Opciones.setDoubleBuffered(true);
        Tre_Opciones.setDragEnabled(true);
        Tre_Opciones.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jTree1MouseClicked(evt);
            }
        });
        Tre_Opciones.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                Tre_OpcionesKeyPressed(evt);
            }
        });
        jScrollPane1.setViewportView(Tre_Opciones);

        jPanel2.add(jScrollPane1, java.awt.BorderLayout.CENTER);

        jScrollPane2.setBackground(new java.awt.Color(255, 255, 255));
        jScrollPane2.setBorder(javax.swing.BorderFactory.createTitledBorder("Favoritos"));

        lFavoritos.setForeground(new java.awt.Color(0, 0, 255));
        lFavoritos.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        lFavoritos.setComponentPopupMenu(pListFavoridos);
        lFavoritos.setSelectionBackground(new java.awt.Color(204, 255, 204));
        lFavoritos.setSelectionForeground(new java.awt.Color(0, 0, 255));
        lFavoritos.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                lFavoritosMouseClicked(evt);
            }
        });
        jScrollPane2.setViewportView(lFavoritos);

        jPanel2.add(jScrollPane2, java.awt.BorderLayout.PAGE_END);

        jSplitPane1.setLeftComponent(jPanel2);

        Lab_Proceso.setFont(new java.awt.Font("Dialog", 0, 10)); // NOI18N
        Lab_Proceso.setText("IG Metrica");
        Lab_Proceso.setToolTipText("Estado");
        Lab_Proceso.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(jToolBar1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .add(Lab_Proceso, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .add(jSplitPane1)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(jToolBar1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 46, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(jSplitPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 211, Short.MAX_VALUE)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(Lab_Proceso))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents
    private void Button_SalirKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_Button_SalirKeyPressed
        if (evt.getKeyCode() == 10) {
            EventoBotonSalir();
        }
    }//GEN-LAST:event_Button_SalirKeyPressed

    private void Tre_OpcionesKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_Tre_OpcionesKeyPressed
        if (evt.getKeyCode() == ITeclas.ENTER && session.size() > 0) {
            this.validarEvento(1, null);
        }
    }//GEN-LAST:event_Tre_OpcionesKeyPressed

    private void Button_AboutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_Button_AboutActionPerformed
        new DAbout(this, true);
    }//GEN-LAST:event_Button_AboutActionPerformed

    private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing
        if (JOptionPane.showConfirmDialog(this, "Salir de IG Metrica", "Mensaje", JOptionPane.OK_CANCEL_OPTION) == 0) {
            killerProcess();
            clossing();
            System.exit(-1);
        }
    }//GEN-LAST:event_formWindowClosing

    private void Button_SalirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_Button_SalirActionPerformed
        EventoBotonSalir();
    }//GEN-LAST:event_Button_SalirActionPerformed

    private void jTree1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTree1MouseClicked
        if (Tre_Opciones.getLastSelectedPathComponent() != null && ((DefaultMutableTreeNode) Tre_Opciones.getLastSelectedPathComponent()).isLeaf()) {
            Lab_Proceso.setText(Tre_Opciones.getLastSelectedPathComponent().toString());
            if (evt.getClickCount() == 2 && session.size() > 0) {
                this.validarEvento(1, null);
            }
        }
    }//GEN-LAST:event_jTree1MouseClicked

    private void mAddFavoritosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mAddFavoritosActionPerformed
        validarEvento(0, null);
    }//GEN-LAST:event_mAddFavoritosActionPerformed

    private void mDelFavoritosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mDelFavoritosActionPerformed
        try {
            if (lFavoritos.getSelectedValue() != null) {
                favoritos.remove(lFavoritos.getSelectedValue());

                XStream x = new XStream();
                FileWriter fileWriter = new FileWriter("server/favoritos/favoritos.xml");
                x.toXML(favoritos, fileWriter);
                fileWriter.close();

                lFavoritos.setModel(new ModeloLista(favoritos.toArray()));
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }//GEN-LAST:event_mDelFavoritosActionPerformed

    private void lFavoritosMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lFavoritosMouseClicked
        if(session!=null && session.get("rol_dto")!=null && evt.getClickCount()>1 && lFavoritos.getSelectedValue() != null ){
            validarEvento(1, (OpcionDTO) lFavoritos.getSelectedValue());
        }
    }//GEN-LAST:event_lFavoritosMouseClicked

    private void contenedorComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_contenedorComponentResized
        lIg.setLocation(contenedor.getWidth()-210, contenedor.getHeight()-125);
    }//GEN-LAST:event_contenedorComponentResized

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton Button_About;
    private javax.swing.JButton Button_Salir;
    private javax.swing.JLabel Lab_Proceso;
    private javax.swing.JTree Tre_Opciones;
    private javax.swing.JDesktopPane contenedor;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JSplitPane jSplitPane1;
    private javax.swing.JToolBar jToolBar1;
    private javax.swing.JList lFavoritos;
    private javax.swing.JLabel lIg;
    private javax.swing.JMenuItem mAddFavoritos;
    private javax.swing.JMenuItem mDelFavoritos;
    private javax.swing.JPopupMenu pListFavoridos;
    private javax.swing.JPopupMenu pTree;
    // End of variables declaration//GEN-END:variables
}
